最常用于分类问题(包括多分类),特别是特征也是离散变量的情况
所谓朴素贝叶斯法主要是基于两大假设:
条件独立性。样本的各个特征在结果给定的条件下(也就是当y是确定时)是相互独立的;
基于贝叶斯后验概率最大计算参数。
通过例子解释
In [1]:
import numpy as np
import pandas as pd
from sklearn import datasets
import matplotlib.pyplot as plt
%matplotlib inline
In [2]:
#获取鸢尾花数据
iris = datasets.load_iris()
print('鸢尾花类型有:',iris.target_names)
print('鸢尾花数据集包括的特征有:',iris.feature_names)
In [4]:
y = iris.target
X = iris.data
所以$X$表示样本的特征,也就是模型的输入;$y$是标记,是模型的输出。
其实构建模型的最终目标是要计算$P(y = c_k |X)$,即在$X$给定的条件下计算$y=c_k$的概率。这里假设$y$是离散变量,其可能的取值是$c_k$
那么根据Bayes准则,可以得到如下转换:
$$P(y=c_k | X) = \frac{P(X, y=c_k)}{P(X)} = \frac{P(X | y=c_k) P(y=c_k)}{\sum_{k} P(X | y=c_k) P(y=c_k)}$$而 $$P(X | y=c_k) = P(X^1=x^1, X^2=x^2, … , X^n=x^n | y = x_k)$$ 这里$n=4$.
要计算上述式子相当困难。
而朴素贝叶斯模型,又加了一个条件:在$y$给定的条件下,各特征之间相互独立。那么上述式子可以转化为
$$P(X | y=c_k) = P(X^1=x^1, X^2=x^2, … , X^n=x^n | y = c_k) = \prod_{j=1}^n P(X^j=x^j | y=c_k)$$带入得到:
$$P(y=c_k | X) = \frac{P(y=c_k) \prod_{j=1}^n P(X^j=x^j | y=c_k)}{\sum_k P(y=c_k) \prod_{j=1}^n P(X^j=x^j | y=c_k)}$$所以,只需要找到某一个$k$或者($c_k$)使得上述式子最大化即可。
其中,$P(X^j=x^j | y=c_k)$的计算一般根据频率统计即可
所以,这种方法常用与分类问题(包括多分类),特别是特征也是离散变量的情况。
如果是回归问题, 也就是$y$是连续变量那么还需要对$P(X^j | y)$以及$P(y)$的分布进行进一步假设,在通过极大似然估计法估计相关参数。